package com.ssy.lingxi.product.service.platform;

import com.ssy.lingxi.common.constant.tree.Node;
import com.ssy.lingxi.common.model.vo.PageVO;
import com.ssy.lingxi.common.model.vo.SelectVO;
import com.ssy.lingxi.product.entity.platform.Category;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 品类管理类
 * @author jw.chen
 * @version 2.0.0
 * @date 2020/6/22
 */
public interface ICategoryService {
    /**
     * 查询品类树
     * @return Wrapper<?>
     * @param rootNodeId
     */
    List<Node> getCategoryTree(Long rootNodeId, Integer excludeType);

    /**
     * 查询属性
     * @param pageVO
     * @param name
     * @return Wrapper<?>
     */
    Page<Category> getCategoryList(PageVO pageVO, String name);

    /**
     * 查询品类
     * @param categoryId
     */
    Category getCategory(Long categoryId);

    /**
     * 添加/修改品类
     * @param category
     */
    String saveOrUpdateCategory(Category category);

    /**
     * 删除品类
     * @param categoryId
     * @return
     */
    String deleteCategory(Long categoryId);

    /**
     * 通过fullId查找完整名称(包括所有父级节点名称)
     * @param fullId
     * @return
     */
    String getFullNameByFullId(String fullId);

    /**
     * 查询平台后台品类最大级别
     * @return
     */
    Integer getCategoryMaxLevel();

    /**
     * 查询品类下拉框
     * @param name
     * @return
     */
    List<SelectVO> getSelectCategory(String name);

    /**
     * 根据等级查询平台后台品类
     * @param parentId
     * @return
     */
    List<SelectVO> getCategoryByParentId(Long parentId);

    /**
     * 初始化数据到redis
     */
    void initToRedis();

    /**
     * 查询平台后台所有品类的id
     * @return 品类id集合
     */
    List<Long> getCategoryIdList();

    /**
     * 查询平台后台所有品类的名称
     * @return 品类名称集合
     */
    List<String> getCategoryNameList();
}
